package com.lingjtx.common.security.strategy;

import com.lingjtx.common.core.RedisOptions;
import com.lingjtx.common.core.ResponseCode;
import com.lingjtx.common.core.ResponseResult;
import com.lingjtx.common.core.constant.RedisConfig;
import com.lingjtx.common.core.util.StringUtil;
import com.lingjtx.common.core.token.AuthToken;
import com.lingjtx.common.core.token.UserDetail;

import java.util.Objects;

/**
 * 在token!=null前提下：
 * exp 时间过期，直接返回token过期
 * token == null，进入下一个状态判断，not_login 状态
 */
public class TokenExpireStrategy extends TokenStateHandler {
    @Override
    public ResponseResult<Object> retError() {
        return ResponseResult.createByError(ResponseCode.UNAUTHORIZED);
    }

    @Override
    public boolean handler(RedisOptions redis, String token) {
        if (StringUtil.isNotEmpty(token) && !redis.exists(token)) { // 不存在，查看刷新是否token存在
            UserDetail userDetail = AuthToken.getUser(token);
            if (Objects.nonNull(userDetail) && AuthToken.isExpTime(token)) {
                return !redis.exists(RedisConfig.KEY_USER_TOKEN + userDetail.getUserId());
            }
        }
        return true;
    }
}
